Materials/ Visual Shading Language/ Fog Examples

Fog Examples

Plasma fog

'Plasma' like fog, that is, fog which is self illuminating, can be simulated by the following VSL structure:

 
 
Notes:

  • The first two VSL objects in the 'Surface properties' shader make the fog surface invisible. Assigning the value of 2 to the Volume sampling channel activates the volume effects: the interior of the fog cloud is studied by taking two samples at suitable intervals. For a simple fog like this, even a smaller value of 1 would suffice.
  • In the 'Volume properties' shader, a constant value is assigned to the illumination channel. The Illumination channel represents the total result of shading. This material assigns an illumination value directly. This means that light sources or shadows will not affect the fog, it appears self-illuminating.
  • A 'Noise' object defines the Turbidity property. Use a parallel mapping to map this fog material, then noise uses continuous coordinates without 'seams'. Noise is not centered at zero because negative values would result in empty patches in the fog.
  • Turbidity, the density of fog, is the strongest fog attribute in the sense that other illumination properties define the properties of one single fog particle, and the final result (color in the rendered image) is after all defined by turbidity. This makes sense: one tiny fog particle does not change the shading much, no matter how bright it is. There must be many such particles (=some amount of turbidity) before the contribution becomes noticeable.
  • Remember to check 'Volumetric effects' in the Render settings/Ray tracing options, to get the effect visible.

Example file: tutorprojects/material/vsl/plasma

 

Linear fog

The rendering system handles the blending of fog effects to other illumination automatically. The blending ratio is defined by the 'Turbidity' property, which defines the density of the fog. The blending process is not linear: The longer the distance, which the light travels inside the fog, the stronger the influence of the fog becomes, but the fog never stops the ray completely.

Below is shown the structure of a material, which overrules this default fog shading. The fog effect defined by it is linear: if a layer of say 1 meter changes the illumination traveling through it by 50 %, then two meters of fog hides the background completely. The density of the fog defines the distance, which is required for full impenetrability.

 

Notes:

  • Turbidity channel is not used at all. The material computes and assigns the fog effect to the illumination channel. Leaving turbidity to zero means that no default shading will take place.
  • The fog is similar to the previous example in that it is self-illuminating.

Example file: tutorprojects/material/vsl/linearfog

 

Shadows in fog

The two fog types presented above are self-illuminating: light sources do not affect them at all. A fog that reacts with light can be obtained by the following VSL code:

 

Notes:

  • The interaction with light sources is obtained by assigning a non-zero value to the 'Volume:Color' channel in the 'Volume properties' shader. The color channel defines the diffuse shading properties of the fog particles.
  • The Volume sampling channel has now a much higher value than in the previous example. The higher the value, the more accurately the shape and details of the shadows inside the fog are rendered.
  • Remember to check 'Volumetric effects' and 'Lighting in volume' in the Render settings/Ray tracing options.
  • Only the light sources having the 'Volumetric' option set (set by default) create volumetric effects.

Example file: tutorprojects/material/vsl/shadowfog
 

Additive fog

The 'Linear fog' example above explained how to define custom fog shading for a self-illuminating 'plasma' fog using the 'Volume properties' shader. It is possible to customize the default fog shading of fog that reacts with light in the 'Volumetric shading' shader, which is evaluated after fog illumination computations.

The material below shows one such example, additive fog. The fog is diffusely illuminated. It has the special property that it never darkens the illumination behind it. A normal fog does this: black smoke can hide flames of fire.

  • Density is a parameter that the controls the thickness of the fog.
  • Sampling defines how accurately the shadows in the fog are computed.
  • The main parameters are initialized in the 'Material initialization' shader.
  • The 'Surface properties' shader makes the fog surface transparent, removes diffuse shading from it (Color=black) so that the surface becomes clear, and launches volumetric sampling by copying the sampling parameter to the 'Volume sampling' channel.
  • The 'Volume properties' shader does not set the 'Turbidity' channel, which controls default shading of the fog. Instead, it moves the sample position randomly along the traced ray. The sampling density and distance control the amount of random movement. Therefore, the random variation keeps the samples inside the fog. The random factor improves quality and helps to detect small shadows.
  • 'Volume shading' computes fog illumination, which is proportional to density and distance. This illumination is simply added to any previous illumination. This makes the fog additive.

Example file: tutorprojects/material/vsl/additivefog

 

Shadows by fog

This example demonstrates how to use the 'Volume filtering' shader. In this shader, it is possible to define how the 'interior' of a material creates shadows. The shadowing property is defined by assigning suitable values to the 'VFilter:Transparency' channel in the 'Volume filtering' shader.

The VSL hierarchy is:

Notes:

  • The rather complex computations in the 'Volume filtering' shader take care of several details: they produce a shadow, whose intensity is proportional to the square of the distance which the light travels in the fog. The intensity is modified by some Noise and the shadow color is smoothly faded to white at edges.
  • The shadow in the example project is quite subtle and it is hard to tell if it is really the interior and not the surface, which creates the shadow. The difference becomes important in animations where objects and/or light sources are inside the fog. In other situations, it may be a better solution to create the shadow on the surface, because volumetric filtering is quite a time consuming feature. Especially, when both volumetric illumination and volumetric filtering are activated (like in the example), lots of computations are required, because the interior of the fog creates shadows in the interior of the fog. Therefore, the rendering time required by volumetric effects becomes proportional to the square of the sampling density - a 10 times higher sampling rate takes 100 times longer to render.
  • 'Volumetric effects', 'Lighting in volume' and 'Volume shadows' in the Render settings/Ray tracing options must be checked when rendering this example.

Example file: tutorprojects/material/vsl/shadowbyfog